package question.T0125_2_DessertShop;

import question.T0125_2_DessertShop.tax.TaxCalculator;

import java.util.ArrayList;
import java.util.List;

/**
 * 你经营着两家店铺，分别是：
 * 1. Pizza 店，有两种商品，价格为 15.99 的"Margherita Pizza"和价格为 18.99 的"Pepperoni Pizza"
 * 2. Donut 店，有两种商品，价格为 2.99 的"Glazed Donut"和价格为 3.99 的"Chocolate Donut"
 * 现在请你开发一个商店收银台软件，顾客通过 shop 的 buyItems 方法，输入商品名称进行下单。
 * 一笔订单中可以有多个商品，如果同一种商品购买多个即输入多次该商品名。
 * 跳过该店铺无法提供的商品，只对可以提供的商品进行计费。每个店铺可以提供的商品列表保存在 menuList 中。
 * 每一笔订单都需要缴税后再计入总收入 income。一段时间后，需要通过 shop 的 getIncome 方法查看商店的税后收入。
 * 缴税方式一共有3种：
 * 1. ZeroTax: 税费为 0
 * 2. FixedProportionalTax: 对于每一笔成功的订单，先收取 fixedTax 数额的固定税，再按比例收税，收取交易额的 taxProp%。
 *      结果四舍五入保留2位小数。
 * 3. LadderTax: 根据 taxLadder 进行阶梯计税。
 *      LadderTax 是一个二维数组，用于定义阶梯计税的区间和对应的税率。每一行表示一个阶梯区间，包括两个值：
 *          起点 (start)：该阶梯的起始收入值（含起点）。
 *          税率 (rate)：该阶梯适用的税率。
 *      示例如下：
 *      double[][] taxBrackets = {
 *          {0.0, 0.1},    // 第一阶梯：收入 0 ~ 10000，税率 10%
 *          {10000.0, 0.2}, // 第二阶梯：收入 10000 ~ 20000，税率 20%
 *          {20000.0, 0.3}  // 第三阶梯：收入 20000 及以上，税率 30%
 *      };
 *      各个阶梯税费求和后，四舍五入保留2位小数。
 */
public abstract class Shop {
    protected double income;
    protected TaxCalculator calculator;
    protected List<Item> menuList = new ArrayList<>();

    public Shop(TaxCalculator calculator) {
        // 在这里添加或者修改代码

        // 可修改部分结束
        initializeMenu();
    }

    public void buyItems(String ...itemNames) {
        double totalPrice = 0;
        // 在这里添加或者修改代码

        // 可修改部分结束
        System.out.println("totalPrice: " + totalPrice);
        computeIncome(totalPrice);
    }

    public double getIncome() {
        return income;
    }

    protected abstract void initializeMenu();

    private void computeIncome(double orderIncome) {
        // 在这里添加或者修改代码
        double orderIncomeAfterTax = 0;
        // 可修改部分结束
        System.out.println("orderIncomeAfterTax: " + orderIncomeAfterTax);
        income += orderIncomeAfterTax;
    }
}
